{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _`userguide/eda`:\n",
    "\n",
    "EDA\n",
    "===\n",
    "\n",
    "This section introduces the Exploratory Data Analysis component of DataPrep."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 2,
     "titlesonly": true
    },
    "tags": [
     "nbsphinx-toctree"
    ]
   },
   "source": [
    "## Section Contents\n",
    "\n",
    " * [plot(): analyze distributions](plot.ipynb)\n",
    " * [plot_correlation(): analyze correlations](plot_correlation.ipynb)\n",
    " * [plot_missing(): analyze missing values](plot_missing.ipynb)\n",
    " * [plot_diff(): analyze difference between DataFrames](plot_diff.ipynb)\n",
    " * [create_report(): create a profile report](create_report.ipynb)\n",
    " * [create_db_report(): generate summary of your databases](create_db_report.ipynb)\n",
    " * [Get intermediates: get the intermediate data](get_intermediates.ipynb) \n",
    " * [How-to guide: customize your output](how_to_guide.ipynb)\n",
    " * [Parameter configurations: parameter summary settings](parameter_configurations.ipynb)\n",
    " * [Insight: automatically insight detection](insights.ipynb)\n",
    " * [Case study: Titanic](titanic.ipynb)\n",
    " * [Case study: House Prices](house_price.ipynb)\n",
    " * [Other use cases](use_case.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction to Exploratory Data Analysis and `dataprep.eda`\n",
    "\n",
    "[Exploratory Data Analysis (EDA)](https://www.wikiwand.com/en/Exploratory_data_analysis) is the process of exploring a dataset and getting an understanding of its main characteristics. The `dataprep.eda` package simplifies this process by allowing the user to explore important characteristics with simple APIs. Each API allows the user to analyze the dataset from a high level to a low level, and from different perspectives. Specifically, `dataprep.eda` provides the following functionality:\n",
    "\n",
    "* Analyze column **distributions** with `plot()`. The function `plot()` explores the column distributions and statistics of the dataset. It will detect the column type, and then output various plots and statistics that are appropriate for the respective type. The user can optionally pass one or two columns of interest as parameters: If one column is passed, its distribution will be plotted in various ways, and column statistics will be computed. If two columns are passed, plots depicting the relationship between the two columns will be generated.\n",
    "\n",
    "* Analyze **correlations** with `plot_correlation()`. The function `plot_correlation()` explores the correlation between columns in various ways and using multiple correlation metrics. By default, it plots correlation matrices with various metrics. The user can optionally pass one or two columns of interest as parameters: If one column is passed, the correlation between this column and all other columns will be computed and ranked. If two columns are passed, a scatter plot and regression line will be plotted.\n",
    "\n",
    "* Analyze **missing values** with `plot_missing()`. The function `plot_missing()` enables thorough analysis of the missing values and their impact on the dataset. By default, it will generate various plots which display the amount of missing values for each column and any underlying patterns of the missing values in the dataset. To understand the impact of the missing values in one column on the other columns, the user can pass the column name as a parameter. Then, `plot_missing()` will generate the distribution of each column with and without the missing values from the given column, enabling a thorough understanding of their impact.\n",
    "\n",
    "* Analyze column **differences** with `plot_diff()`. The function `plot_diff()` explores the differences of column distributions and statistics across multiple datasets. It will detect the column type, and then output various plots and statistics that are appropriate for the respective type. The user can optionally set the baseline which is used as the target dataset to compare with other datasets.\n",
    "\n",
    "The following sections give a simple demonstration of `plot()`, `plot_correlation()`, `plot_missing()`, and `plot_diff()` using an example dataset."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analyze distributions with `plot()`\n",
    "\n",
    "The function `plot()` explores the distributions and statistics of the dataset. The following describes the functionality of `plot()` for a given dataframe `df`.\n",
    "\n",
    "1. `plot(df)`: plots the distribution of each column and calculates dataset statistics\n",
    "2. `plot(df, x)`: plots the distribution of column `x` in various ways and calculates column statistics\n",
    "3. `plot(df, x, y)`: generates plots depicting the relationship between columns `x` and `y`\n",
    "\n",
    "The following shows an example of `plot(df)`. It plots a histogram for each numerical column, a bar chart for each categorical column, and computes dataset statistics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-07-19T18:22:23.491850Z",
     "start_time": "2020-07-19T18:22:14.040665Z"
    },
    "execution": {
     "iopub.execute_input": "2021-03-03T23:20:48.830743Z",
     "iopub.status.busy": "2021-03-03T23:20:48.825333Z",
     "iopub.status.idle": "2021-03-03T23:21:11.238716Z",
     "shell.execute_reply": "2021-03-03T23:21:11.239639Z"
    }
   },
   "outputs": [],
   "source": [
    "from dataprep.eda import plot\n",
    "from dataprep.datasets import load_dataset\n",
    "import numpy as np\n",
    "df = load_dataset('titanic')\n",
    "plot(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-07-19T18:25:08.492696Z",
     "start_time": "2020-07-19T18:25:08.485186Z"
    }
   },
   "source": [
    "For more information about the function `plot()` see [here](plot.ipynb)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analyze correlations with `plot_correlation()`\n",
    "\n",
    "The function `plot_correlation()` explores the correlation between columns in various ways and using multiple correlation metrics. The following describes the functionality of `plot_correlation()` for a given dataframe `df`.\n",
    "\n",
    "1. `plot_correlation(df)`: plots correlation matrices (correlations between all pairs of columns)\n",
    "2. `plot_correlation(df, x)`: plots the most correlated columns to column `x`\n",
    "3. `plot_correlation(df, x, y)`: plots the joint distribution of column `x` and column `y` and computes a regression line\n",
    "\n",
    "The following shows an example of `plot_correlation()`. It generates correlation matrices using [Pearson](https://www.wikiwand.com/en/Pearson_correlation_coefficient), [Spearman](https://www.wikiwand.com/en/Spearman%27s_rank_correlation_coefficient), and [KendallTau](https://www.wikiwand.com/en/Kendall_rank_correlation_coefficient) correlation coefficients\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-07-19T18:22:27.146326Z",
     "start_time": "2020-07-19T18:22:23.581827Z"
    },
    "execution": {
     "iopub.execute_input": "2021-03-03T23:21:11.251321Z",
     "iopub.status.busy": "2021-03-03T23:21:11.250215Z",
     "iopub.status.idle": "2021-03-03T23:21:11.659110Z",
     "shell.execute_reply": "2021-03-03T23:21:11.659972Z"
    }
   },
   "outputs": [],
   "source": [
    "from dataprep.eda import plot_correlation\n",
    "from dataprep.datasets import load_dataset\n",
    "df = load_dataset(\"wine-quality-red\")\n",
    "plot_correlation(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-07-19T18:27:29.753444Z",
     "start_time": "2020-07-19T18:27:29.744972Z"
    }
   },
   "source": [
    "For more information about the function `plot_correlation()` see [here](plot_correlation.ipynb)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analyze missing values with `plot_missing()`\n",
    "\n",
    "The function `plot_missing()` enables thorough analysis of the missing values and their impact on the dataset. The following describes the functionality of `plot_missing()` for a given dataframe `df`.\n",
    "\n",
    "1. `plot_missing(df)`: plots the amount and position of missing values, and their relationship between columns\n",
    "2. `plot_missing(df, x)`: plots the impact of the missing values in column `x` on all other columns\n",
    "3. `plot_missing(df, x, y)`: plots the impact of the missing values from column `x` on column `y` in various ways."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-07-19T18:22:28.943130Z",
     "start_time": "2020-07-19T18:22:27.220346Z"
    },
    "execution": {
     "iopub.execute_input": "2021-03-03T23:21:11.669121Z",
     "iopub.status.busy": "2021-03-03T23:21:11.668078Z",
     "iopub.status.idle": "2021-03-03T23:21:12.160698Z",
     "shell.execute_reply": "2021-03-03T23:21:12.161521Z"
    }
   },
   "outputs": [],
   "source": [
    "from dataprep.eda import plot_missing\n",
    "from dataprep.datasets import load_dataset\n",
    "df = load_dataset(\"titanic\")\n",
    "plot_missing(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For more information about the function `plot_missing()` see [here](plot_missing.ipynb)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analyze difference with `plot_diff()`\n",
    "\n",
    "The function `plot_diff()` explores the difference of column distributions and statistics across multiple datasets. The following describes the functionality of `plot_diff()` for two given dataframes `df1` and `df2`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from dataprep.eda import plot_diff\n",
    "from dataprep.datasets import load_dataset\n",
    "df1 = load_dataset(\"house_prices_test\").iloc[:, :9]\n",
    "df2 = load_dataset(\"house_prices_train\").iloc[:, :9]\n",
    "plot_diff([df1, df2])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For more information about the function `plot_diff()` see [here](plot_diff.ipynb)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create a profile report with `create_report()`\n",
    "\n",
    "The function `create_report()` generates a comprehensive profile report of the dataset. `create_report()` combines the individual components of the `dataprep.eda` package and outputs them into a nicely formatted HTML document. The document contains the following information:\n",
    "\n",
    "1. Overview: detect the types of columns in a dataframe\n",
    "2. Variables: variable type, unique values, distint count, missing values\n",
    "3. Quantile statistics like minimum value, Q1, median, Q3, maximum, range, interquartile range\n",
    "4. Descriptive statistics like mean, mode, standard deviation, sum, median absolute deviation, coefficient of variation, kurtosis, skewness\n",
    "5. Text analysis for length, sample and letter\n",
    "6. Correlations: highlighting of highly correlated variables, Spearman, Pearson and Kendall matrices\n",
    "7. Missing Values: bar chart, heatmap and spectrum of missing values\n",
    "\n",
    "An example report can be downloaded [here](../../_static/images/create_report/titanic_dp.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Customize the plot\n",
    "\n",
    "### Customize plot via `config`\n",
    "The plot/report can be customized via the `config` parameter. E.g., enable/disable some plots, set the bins of histogram, set the height and width of the plots. \n",
    "\n",
    "The following example shows how to set the bins of histogram to 1000, and disable the `KDE Plot`. For more configurations, please read this doc: [Parameter configurations: parameter summary settings](parameter_configurations.ipynb)\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from dataprep.eda import plot\n",
    "from dataprep.datasets import load_dataset\n",
    "df = load_dataset('titanic')\n",
    "plot(df, config = {\"hist.bins\": 1000, \"kde.enable\": False})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Identify some plots to show via `display`\n",
    "In `config`, you can set disable some plots by set its `enable` to False, as shown in the above example which disable `KDE Plot`. However, sometimes you may just want to show some plots and disable all other plots. In this case, using the`display` is a more convenient approach. You can just input the plot names that you want to display in `display`. E.g., the following code will show only `Interactions` section in report:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from dataprep.eda import create_report\n",
    "from dataprep.datasets import load_dataset\n",
    "df = load_dataset('titanic')\n",
    "create_report(df, display = [\"Interactions\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following code will show only box plot:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from dataprep.eda import plot\n",
    "from dataprep.datasets import load_dataset\n",
    "df = load_dataset('titanic')\n",
    "plot(df, display = [\"Bar Chart\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Get the intermediate data\n",
    "\n",
    "DataPrep.EDA separates the computation and rendering, so that you can just compute the intermediate data and render it using other plotting libraries. \n",
    "\n",
    "For each `plot` function, there is a corresponding `compute` function, which returns the computed intermediates used for rendering. For example, for `plot_correlation(df)` function, you can get the intermediates using `compute_correlation(df)`. It's a dictionary, and you can also save it to a json file."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from dataprep.eda import compute_correlation\n",
    "from dataprep.datasets import load_dataset\n",
    "df = load_dataset(\"titanic\")\n",
    "imdt = compute_correlation(df)\n",
    "imdt.save(\"imdt.json\")\n",
    "imdt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Specifying colors\n",
    "\n",
    "The supported colors of DataPrep.EDA match those of the [Bokeh](https://bokeh.org/) library. Color values can be provided in any of the following ways:\n",
    "\n",
    "* any of the [147 named CSS colors](http://www.w3schools.com/colors/colors_names.asp), e.g 'green', 'indigo'\n",
    "\n",
    "* an RGB(A) hex value, e.g., '#FF0000', '#44444444'\n",
    "\n",
    "* a 3-tuple of integers (r,g,b) between 0 and 255\n",
    "\n",
    "* a 4-tuple of (r,g,b,a) where r, g, b are integers between 0 and 255 and a is a floating point value between 0 and 1"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Edit Metadata",
  "hide_input": false,
  "interpreter": {
   "hash": "1f1c771aa7e44c1d88ee5cde649fa00b963c4e0914d7adcf5ffc0b0d1ad3cd5b"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "05b321e30b57473e89fcea71c7005305": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_8b14e8f716a04be0af1e3086140f96b9",
       "max": 161,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_c9c907d3ac1f4a7ea8fb83b13aabd9cd",
       "value": 161
      }
     },
     "13efaaf535ff4976891902b34ee78aea": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_8392091aa0974de9afcc67db4ee26017",
       "placeholder": "​",
       "style": "IPY_MODEL_913812a0289b43ad884108cb1f17a773",
       "value": " 0/161 [00:00&lt;?, ?it/s]"
      }
     },
     "1c7a9e17fea147f7938386b842bd1ad2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_22dc6d8eb4d846c4a6f6824c627029fd",
        "IPY_MODEL_05b321e30b57473e89fcea71c7005305",
        "IPY_MODEL_13efaaf535ff4976891902b34ee78aea"
       ],
       "layout": "IPY_MODEL_d10213a7d2a441f28657c235b5d14ec9"
      }
     },
     "22dc6d8eb4d846c4a6f6824c627029fd": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_8bf9e1070e034605b3215e61512488af",
       "placeholder": "​",
       "style": "IPY_MODEL_876c17154cf349a8b512266814436339",
       "value": "Computing len-0ce5fe027d91983559219efd5f65cc15:   0%"
      }
     },
     "3ff10ba05fdf470a9d7c1b301779c532": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_9bc702035e1e465e80102700780679c5",
       "placeholder": "​",
       "style": "IPY_MODEL_fef991adb1864383934b06fc2b24d9f5",
       "value": " 5911/5911 [00:05&lt;00:00, 933.07it/s]"
      }
     },
     "45d74fd82ff7455faf6fb0cc185d4d8b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "658faeaddd274e1da9e9a9cacfadda8e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "8392091aa0974de9afcc67db4ee26017": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "876c17154cf349a8b512266814436339": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "8b14e8f716a04be0af1e3086140f96b9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "8bf9e1070e034605b3215e61512488af": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "913812a0289b43ad884108cb1f17a773": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "9236b3da7de0454fad3f329b78b0f7e9": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_ff6c81ef60464830b490b7232b2ad4b4",
        "IPY_MODEL_b15bc27d7c744acd80d798ae03d19c48",
        "IPY_MODEL_3ff10ba05fdf470a9d7c1b301779c532"
       ],
       "layout": "IPY_MODEL_ec00cbdf2e3249adb979cbef4ffacc77"
      }
     },
     "98d05fb523ff4c6aa4c3d53958f775a0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "9bc702035e1e465e80102700780679c5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "b15bc27d7c744acd80d798ae03d19c48": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_ed4f15c3df5b4dd3a8658c1a461e8d35",
       "max": 5911,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_45d74fd82ff7455faf6fb0cc185d4d8b",
       "value": 5911
      }
     },
     "c9c907d3ac1f4a7ea8fb83b13aabd9cd": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "d10213a7d2a441f28657c235b5d14ec9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "ec00cbdf2e3249adb979cbef4ffacc77": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "ed4f15c3df5b4dd3a8658c1a461e8d35": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "fef991adb1864383934b06fc2b24d9f5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "ff6c81ef60464830b490b7232b2ad4b4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_98d05fb523ff4c6aa4c3d53958f775a0",
       "placeholder": "​",
       "style": "IPY_MODEL_658faeaddd274e1da9e9a9cacfadda8e",
       "value": "Computing getitem-bdae67a7f26c43b34a785a4f18952540: 100%"
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}